//
//  HomeTableViewController.swift
//  3月5的项目
//
//  Created by 哦哦 on 16/3/5.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
//导入命名控件
import AFNetworking
import SVProgressHUD
//定义首页重用标识符  手写代码 1.注册可重用标识符  2.从缓存中根据重用标识符 获取cell
//storyboard 直接属性设置栏中设置重用标识符即
private let HomeCellId = "HomeCellId"
class HomeTableViewController: BaseTableViewController {
    
    //数据源属性
    lazy var statuses = [Status]()

    let myRefresh = WBRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
//        print(view)
        if !userLogin {
             //设置访客视图的信息
//        print(view)
        visitorLoginView?.setupInfoWith("关注一些人,回到这里看看有什么惊喜", imageName: nil)
            //用户没有登录
            return
        }
        //准备tableView
         prepareForTableView()
        
//        demo()
//        Status.loadHomeData()
//        Status.loadHomeData { (array) -> () in
//            
//            
//            guard let list = array else {
//                //界面层 就应该和用户交互
//                SVProgressHUD.showErrorWithStatus(AppErrorTip)
//                return
//            }
//            //保存数组
//            self.statuses = list
//            //刷新页面
//            self.tableView.reloadData()
//           
//            
//        }
        
        loadData()
        
    }
    
    
    private func prepareForTableView() {
        //注册cell Reuse 重复使用
        // OC -> [UITableViewCell class]  swift -> UITableViewCell.self
//        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: HomeCellId)
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
//设置cell的固定高度\
//        tableView.rowHeight = 250
        //设置cell的固定高度
        //tableView自动计算行高需要设置两个属性
        //设置预估行高 尽量接近真实行高   contentSize = estimatedRowHeight * count
        tableView.estimatedRowHeight = 300
        //tableView 固定行高 就应该设置 自动计算
        //注意: 必须对contentView底部添加约束  Dimension  尺寸 方面 范围
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //设置分割线
        tableView.separatorStyle = .None
//        refreshControl = UIRefreshControl()
//        
//        //添加事件
//        refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)

        /// 内部指定了固定大小
//        let myRefresh = WBRefreshControl()
        
        self.tableView.addSubview(myRefresh)
        //添加到哪个地方
        tableView.tableFooterView = indicatorView
        //开始转动小菊花  应该在开始加载老数据的时候 转动小菊花
        //        indicatorView.startAnimating()
        
        tableView.scrollsToTop = true
    }
    
    @objc private func loadData() {
        //加载数据之前 开始转动小菊花
        //refresh  使恢复活力
        refreshControl?.beginRefreshing()
//        Status.loadHomeData { (array) -> () in
//        let since_id = self.statuses.first?.id ?? 0
//        Status.loadHomeData(since_id) { (array) -> () in

        //since_id 和 max_id同时指定值 会导致下拉刷新和上拉加载更多数据 获取不到新数据
        //since_id 和 max_id 不能够同时有值 因为服务器无法判断要获取什么数据  这两个参数 是 '互斥' 参数
        
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        if indicatorView.isAnimating() {
            //正在上拉加载更多数据
            max_id = self.statuses.last?.id ?? 0
        } else {
            //下拉刷新数据
            since_id = self.statuses.first?.id ?? 0
        }
        
        
        Status.loadHomeData(since_id,max_id: max_id) { (array) -> () in

            //数据加载结束之后 停止转动小菊花
//            self.refreshControl?.endRefreshing()
            //将自定义的刷新控件改为 normal状态
            self.myRefresh.endRefreshing()
            guard let list = array else {
                //界面层 就应该和用户交互
                SVProgressHUD.showErrorWithStatus(AppErrorTip)
                return
            }
//            print("++++++++++++++++++")
//            print(list.count)
            //保存数组
//            self.statuses = list
            if since_id > 0 {
                //下拉刷新
                self.statuses = list + self.statuses
                //                self.statuses += list
                //                self.statuses = self.statuses + list
            } else {
                //关闭小菊换的转动 为了第二次 加载更多数据能够执行响应的加载数据的方法
                self.indicatorView.stopAnimating()

                //表示首次加载数据
//                self.statuses = list
                //上拉显示更多数据
                 self.statuses += list
            }
            //刷新页面
            self.tableView.reloadData()
        }
    }
        
        
     private lazy var indicatorView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
    
}
//tableView 的数据源方法
//重复遵守协议会保存
extension HomeTableViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //textLabel 是延迟加载  调用的时候就会被实例化 并且被添加到contentView中
        //        cell.textLabel?.text = statuses[indexPath.row].user?.name
        //注册cell
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath)as! StatusCell
        let s = statuses[indexPath.row]
        
        cell.status = s
//         print(s.imageURLs?.count)
//        print(s.id)
        //将要显示最后一行数据的时候 开始加载老数据
//        if indexPath.row == statuses.count - 1 {
        //将要显示最后一行数据的时候 开始加载老数据  并且 小菊花没有转动
        if indexPath.row == statuses.count - 1 &&  !indicatorView.isAnimating() {
            //开始转动小菊花 加载数据
            
            
            //正在做上拉加载更多数据
            indicatorView.startAnimating()
            
             print("开始静默加载数据")
            //开始加载数据
            loadData()
            
            
        }

        return cell
    }
}

